package cn.kgc.spring.service.impl;

import cn.kgc.spring.service.Teacher;

/**
 * @author 课工场
 * @date 2024/2/22
 * @description
 * 问题分析：
 *  1. 为了实现业务功能增强  修改了源代码  违背了代码编写的开闭原则
 *  2. 为了实现业务功能增强  产生了代码的冗余
 *  3. 为了实现业务功能增强  实现方式不够灵活
 *
 *  为了解决以上分析的问题 可以使用代理模式
 *
 *  1.分类
 *     1.1  静态代理
 *          被代理对象    需要增强业务功能的对象    TeacherLi
 *          代理对象     实现了业务功能增强的对象    xxxProxy
 *        实现方法：
 *            1. 代理对象和被代理对象要实现相同的接口
 *            2. 代理对象要依赖于被代理对象   ->  代理对象中需要注入被代理对象
 *     1.2 动态代理
 *         1.2.1  JDK动态代理  基于接口的动态代理   代理类可以动态生成 不需要在自己创建代理类
 *
 *         1.2.2  CgLib动态代理  基于父子关系的代理
 */
public class TeacherLi implements Teacher {

    // 线上教学
    @Override
    public String teachOnLine(String course) {


        System.out.println(course+"课程线上教学进行中...");


        return "course = "+course;

    }

    // 线下教学
    @Override
    public String teachOffLine(String course) {


        System.out.println(course+"课程线下教学进行中...");


        return "course = "+course;
    }
}
